/**
 * Created by 刘淳昊 2017-05-10
 */
window.onload = function () {
    register();
}

var register = function () {
	var _isClick = true; // 防止多次点击
	var _thisNum = 0;
	var _ReType = '';
	var G_VerifyCode = ''; //公共变量 ：用于存储 验证码
	var G_isRegedited = ''; //号码是否已经注册过
	var G_isVerifySuccess = false; //输入的验证码是否验证成功
	var G_isPhoneVerifySuccess = false; //输入的手机验证码是否验证成功
	var userRegister = function() {
		console.log(1)
		_ReType = G_Prg.getQueryString('type');
		if(!_ReType) {
			G_Prg.alert('页面加载失败！', function() {
				window.location.href = 'login.html';
			});
		}
		_showSetp(_thisNum);
		var userRegist = new register();
		userRegist.immediatelyCheckName(); //即时验证用户输入的通行证
		userRegist.immediatelyCheckViff(); //即时验证用户输入的通行证
		userRegist.immediatelyCheckPsw(); //验证密码
		refreshVerifyCode();
		
		_setClickEven();
		// 图片验证码
		$('.signin_phone li strong img').click(function() {
			refreshVerifyCode();
		});
		_showPWDText();
	};
	/*************************************************************
	 函数名：_showPWDText()
	 功能：显示隐藏密码
	返回值：无
	参数：无
	*************************************************************/
	function _showPWDText() {
		$('.signin_resetpwd label em').click(function(event) {
			if($(this).siblings('.passhide').css('display') == 'block') {
				$(this).siblings('.passshow').val($(this).siblings('.passhide').val());
				$(this).siblings('.passhide').hide().siblings('.passshow').show();
				$(this).find('img').attr('src', '/images/baseimg/pwdshow.png');
				event.stopPropagation();
			} else {
				$(this).siblings('.passhide').val($(this).siblings('.passshow').val());
				$(this).siblings('.passhide').show().siblings('.passshow').hide();
				$(this).find('img').attr('src', '/images/baseimg/pwdhide.png');
				event.stopPropagation();
			}
		});
	}
	/********************************************************************************
	 函数名：_setClickEven
	 功能：所有的点击和焦点事件
	 *******************************************************************************/
	function _setClickEven() {
		var userRegist = new register();
		var userResetPassword = new userResetPsw();
		// 第一步
		$('.signin_phone button').click(function() {
			if($(this).hasClass('nex_btn_none')) {
				return;
			}
			if(_ReType === 'register') {
				if(G_isRegedited === false) { //号码未被注册过才能进行下一步
					userRegist.checkVerifyCode();
				} else {
					return;
				}
			} else if(_ReType === 'forget') {
				if(G_isRegedited === true) { //号码已注册过才能进行下一步
					userResetPassword._sendTelCode();
				} else {
					return;
				}
			}
			if(G_isVerifySuccess) { //输入的验证码正确发送短信成功才能进行下一步
				_thisNum = 1;
				_showSetp(_thisNum);
			}
		});
		// 第二步
		$('.signin_resetpwd button').click(function() {
			if($(this).hasClass('nex_btn_none')) {
				return;
			}
			var telNumber = $('.signin_phone input[type=tel]').val();
			var telCode = $('.signin_resetpwd li.verrifi input[type=text]').val();
			if(_ReType === 'register') {
				userRegist.regist();
			} else if(_ReType === 'forget') {
				userResetPassword.resetPassword(telNumber,telCode);
			}
		});
		// 手机验证
		$('.signin_phone input[type=tel]').blur(function() {
			_step0_nextBtnShow();
		});
		
		$('.signin_phone li input[type=text]').blur(function() {
			_step0_nextBtnShow();
		});
		// 手机验证码
		$('.signin_resetpwd li.verrifi input[type=text]').blur(function() {
			_step1_nextBtnShow();
		});
		// 密码验证
		$('.signin_resetpwd input.repwd').blur(function() {
			_step1_nextBtnShow();
		});
		
		// 返回按钮
		$('.backBtn').click(function() {
			if(_thisNum === 0) {
				window.location.href = 'login.html';	
			} else {
				if(_ReType === 'register') {
					refreshVerifyCode();
				}
				_thisNum = --_thisNum;
				_showSetp(_thisNum);
			}
		});
	}
	/********************************************************************************
	 函数名：_step_nextBtnShow
	 功能：下一步的按钮是否可以点击
	 *******************************************************************************/
	function _step0_nextBtnShow() {
		var phoneNum = $('.signin_phone input[type=tel]').val();
		var verifyCode = $('.signin_phone input[type=text]').val();
		if(G_Prg.checkCellPhone(phoneNum)) {
			_checkPhoneIsRegedited(); //判断号码是否已经注册
		} else {
			G_Prg.popMsg('手机号码不正确!',1000,'isCenter');
			return;
		}
		if(verifyCode.length === 4) {
			$('.signin_phone button').attr('class', 'button_reg');
		} else {
			return;
		}
	}

	function _step1_nextBtnShow() {
		$('.signin_resetpwd button').addClass('nex_btn_none');
		var verifyCode = $('.signin_resetpwd li.verrifi input[type=text]').val();
		if(verifyCode.length !== 6) {
			$('.signin_resetpwd input.pwd').focus();
			G_Prg.popMsg('验证码为6位数字!',1000,'isCenter');
			return;
		} else if(!_checkPwd()) {
			$('.signin_resetpwd input.pwd').focus();
			return;
		} else if(verifyCode.length === 6 && _checkPwd()) {
			$('.signin_resetpwd button').attr('class', 'button_reg');
		}
	}
	/*************************************************************
	 函数名：_checkPhoneIsRegedited
	 功能：检验手机是否输入正确并已被注册
	 *************************************************************/
	function _checkPhoneIsRegedited() {
		var userNameElement = $('.signin_phone input[type=tel]');
		var userName = userNameElement.val();
		var userNameReg = /^[a-zA-Z0-9_]+$/;
		var words = userNameReg.test(userNameElement);
		if(words) {
			return;
		}
		// 端口地址
		var URL = '/api/user/checkUser?userName='+userName+'&agentCode='+G_AgentInfo.getAgentCode();
		G_AjaxApi_ZBRecord.get(URL, false,
			function(json) {
				if(!json) {
					G_Prg.throw('程序运行错误: userRegister.register.checkPhoneIsRegedited  请求服务器[/api/getUser]接口无返回！');
				}
				var jsonData = JSON.parse(json);
				if(jsonData.status === 201) {
					G_Cookie.setGuid(jsonData.data);
					if(_ReType === 'forget') {
						$('.signin_phone input[type=tel]').focus();
						G_Prg.popMsg('该号码未注册',1000,'isCenter');
					}
					G_isRegedited = false;
				} else if(jsonData.status === 200) {
					if(_ReType === 'register') {
						G_Prg.popMsg('该号码已被注册',1000,'isCenter');
					}
					G_isRegedited = true;
				} else if(jsonData.status === 300) {
					G_Prg.throw('程序运行错误:userRegister.register.checkPhoneIsRegedited  程序运行错误，数据库获取数据异常');
				} else {
					G_Prg.throw('userRegister.register.checkPhoneIsRegedited  抱歉，不能处理 status = "' + jsonData.status + '"！');
				}
			});
	}
	/*************************************************************
	 函数名：refreshVerifyCode
	 功能：刷新验证码 为公共变量G_VerifyCode 赋值
	 输入参数: 无
	 *************************************************************/
	this.refreshVerifyCode = function() {
		refreshVerifyCode();
	};
	function refreshVerifyCode() {
		G_AjaxApi_ZBRecord.post('/api/verificationCode/refreshVerifyCodeX', {}, false,function(data) {
			var jsonData = JSON.parse(data);
			G_VerifyCode = jsonData.data;
			var imgVerify = $('.signin_phone li strong img');
			imgVerify.attr('src', 'http://121.199.11.87:8118/VerificationCode/CreateVerificationCode/?guid=' + G_VerifyCode);
		});
	}

	/*************************************************************
	 函数名：checkPwd
	 功能：检查次输入的密码长度是否在6-16个字符之间，且是否相同
	 *************************************************************/
	function _checkPwd() { //密码框onblar事件触发
		$('.signin_resetpwd input.passhide').each(function() {
			if($(this).css('display') == 'none') {
				$(this).val($(this).siblings('input.passshow').val());
			}
		});
		var password = $('.signin_resetpwd input.pwd').val();
		var passwordConfirm = $('.signin_resetpwd input.repwd').val();
		if(password === '') {
			return false;
		}
		if(password.length < 6 || password.length > 16) {
			G_Prg.popMsg('密码必须在6-16个字符之间!',1000,'isCenter');
			return false;
		} else if(password !== passwordConfirm) {
			G_Prg.popMsg('两次输入的密码不一致!',1000,'isCenter');
			return false;
		}
		return true;
	}
	/********************************************************************************
	 函数名：_showStep
	 功能：显示进行到的步骤页面
	 *******************************************************************************/
	function _showSetp(num) {
		if(num === 0){
			if(G_Prg.getQueryString('fromUrl') == 'service_index'){
				$('.backLogin').hide();
				$('.backUrl').show();
			}else{
				$('.backLogin').show();
				$('.backUrl').hide();
			}
		}else if(num === 1) {
			$('.backLogin').hide();
			$('.backBtn').show();
		}else if(num === 2) {
			window.location.href = '/switchMenu';
		}
		var inpnum = $('.signinput');
		inpnum.hide().eq(num).show();
	}
	/*************************************************************
	 函数名：register
	 功能：注册
	 *************************************************************/
	function register() {
		/********************************************************************************
		 函数名：immediatelyCheckName
		 功能：即时判断通行证输入框输入内容
		 *******************************************************************************/
		this.immediatelyCheckName = function() {
			var element = $('.loginUl input[type=tel]');
			if("\v" === "v") {
				element.onpropertychange = webChange;
			} else {
				element.keyup(webChange, false);
			}

			function webChange() {
				G_Prg.popMsg(G_Prg.checkUserNameChange(element, 1),1000,'isCenter');
			}
		};
		/********************************************************************************
		 函数名：immediatelyCheckName
		 功能：即时判断验证码输入框输入内容
		 *******************************************************************************/
		this.immediatelyCheckViff = function() {
			var element = $('.loginUl li.verrifi input[type=text]');
			if("\v" === "v") {
				element.onpropertychange = webChange;
			} else {
				element.keyup(webChange, false);
			}
	
			function webChange() {
				G_Prg.checkUserNameViff(element, 1);
			}
		};
		/********************************************************************************
		 函数名：immediatelyCheckPsw
		 功能：即时判断密码输入框输入内容
		 *******************************************************************************/
		this.immediatelyCheckPsw = function() {
			var element = $('.loginUl input[type=password]');
			if("\v" === "v") {
				element.onpropertychange = webChange;
			} else {
				element.keyup(webChange, false);
			}
	
			function webChange() {
				// $('.signin_resetpwd p').html(G_Prg.checkPsw(element, 1));
			}
		};

		/*************************************************************
		 函数名：checkVerifyCode
		 功能：注册时验证验证码并发送短信
		 *************************************************************/
		this.checkVerifyCode = function() {
			$('.loadingDiv,.loadingDrop').show();
			// var userRegister = new userRegister();
			var verifyCode = $('.signin_phone input[type=text]').val();
			var userName = $('.signin_phone input[type=tel]').val();
			var json = {
				"VerifyCode": verifyCode, //验证码
				"guidCode": G_VerifyCode, // 验证码字符串
				"Tel": userName,  // 手机号
				"agentCode": G_AgentInfo.getAgentCode(),   // 代理商编号
				"Opt":'regist',  // 注册
				"isRepeat":0, // 是否为用户点重发
				"product":'考试宝典' // 应用名称
			};
			G_AjaxApi_ZBRecord.post('/api/verificationCode/checkVerifyCodeX', json, false,function(data) {
				$('.loadingDiv,.loadingDrop').hide();
				//转换成json格式
				var jsonData = JSON.parse(data);
				if(jsonData && jsonData.status === 200) {
					G_isVerifySuccess = true;
					G_Prg.popMsg('短信验证码已发送',1000,'isCenter');
					return;
				}
				if(jsonData && jsonData.status === 201) {
					G_VerifyCode = '';
					$('.signin_resetpwd').find('input').val('');
					G_isVerifySuccess = false;
					return;
				}
				if(jsonData && jsonData.status === 202) {
					G_Prg.popMsg('短信验证码已经发送',1000,'isCenter');
					return;
				}
				//异常处理
				G_Prg.alert('程序运行错误，请重新注册！', function() {
					location.reload();
				});
				// G_Prg.throw('程序运行错误!:"' + jsonData.msg + '"!status:' + jsonData.status);
			});
		};

		/*************************************************************
		 函数名：regist
		 功能：注册用户
		 *************************************************************/
		this.regist = function() {
			var smsValidation = $('.signin_resetpwd li.verrifi input[type=text]').val();
			var userName = $('.signin_phone input[type=tel]').val();
			var fromType = G_Prg.getQueryString('isfree');
			$('.signin_resetpwd input.passhide').each(function() {
				if($(this).css('display') == 'none') {
					$(this).val($(this).siblings('input.passshow').val());
				}
			});
			var passWord = hex_md5($('.signin_resetpwd input.pwd').val()); //对密码进行MD5加密后发送
			$('.loadingDiv,.loadingDrop').show();
			G_AjaxApi_ZBRecord.post(
				'/api/user/newRegist', {
					"password": passWord,
					"userName": userName,
					"safeQuetion": '',//请输入找回密码的问题
					"safeAnswer": '',//请输入找回答案
					"guid": G_Cookie.getGuid(),
					"agentCode": G_AgentInfo.getAgentCode(),
					"clientType": _getClientType(),
					'verifyCode': smsValidation
				},true,function(json) {
					$('.loadingDiv,.loadingDrop').hide();
					if(!json) {
						G_Prg.throw('程序运行错误:userRegister.register.regist  请求服务器[/api/user/regist]接口无返回！');
					}
					var jsonData = JSON.parse(json);
					if(jsonData.status === 200) {
						G_Prg.popMsg('注册成功!',1000,'isCenter');
						G_Prg.removeCookie('freeTry');
						if(fromType == '1'){
							G_maiDian.registerSuccess(userName,1);
						}else{
							G_maiDian.registerSuccess(userName,0);
						}
						_login(userName, passWord);
					} else if(jsonData.status === 201) {
						G_Prg.popMsg('该帐号已被注册，请您重新注册',1000,'isCenter');
						window.location.href = '/signup?type=register';
					} else if(jsonData.status === 202) {
						G_Prg.popMsg('注册时间超时，请您重新注册',1000,'isCenter');
						window.location.href = '/signup?type=register';
					} else if(jsonData.status === 203) {
						G_Prg.popMsg('短信验证码不正确',1000,'isCenter');
					} else if(jsonData.status === 300) {
						G_Prg.throw('程序运行错误:userRegister.register.regist  程序运行错误，数据库获取数据异常');
					} else {
						G_Prg.throw('程序运行错误:userRegister.register.regist  抱歉，不能处理 status = "' + jsonData.status + '"！');
					}
				});

		};

		/********************************************************************************
		 函数名：login
		 功能：用户登陆
		 修改：接口由get方式转为post，
		 *******************************************************************************/
		function _login(userName, password) {
			var loginType = 1; //用户名登录
			if(G_Prg.checkEmail(userName)) { //邮箱登录
				loginType = 2;
			}
			if(G_Prg.checkCellPhone(userName)) { //手机登录
				loginType = 3;
			}
			//验证用户名及密码
			var _success = function(json) {
				if(!json) {
					G_Prg.throw('程序运行错误，userLogin.login服务端无返回数据');
				}
				var jsonData = JSON.parse(json);
				if(jsonData.status === 200) {
					G_Cookie.setUserID(jsonData.data.userID);
					G_Cookie.setUserName(userName);
					G_Cookie.setGuid(jsonData.data.guid);
					G_Cookie.removeUserPwd();
					window.location.href = '/switchMenu?nn=' + 1;
				} else if(jsonData.status === 201) {
					G_Prg.popMsg('用户名或者密码不正确',1000,'isCenter');
					$('.signin_resetpwd input.pwd').val('');
					//G_Prg.$('txtName').focus();
				} else if(jsonData.status === 300) {
					G_Prg.throw('程序运行错误，userLogin.login,数据库获取数据异常');
				} else {
					G_Prg.throw('抱歉，userLogin.login不能处理 status = "' + jsonData.status + '"！');
				}
			};
			var URL = '/api/user/userlogin';
	        var params  = {
	            'username': userName,
	            'password': password,
	            'userAgent': _getUserAgent(),
	            'clientType': $urlPath.getClientType()
	        };
	        G_AjaxApi_ZBRecord.post(URL, params, false, _success);
		}
	}
		
	/*************************************************************
	 函数名：userResetPsw
	 功能：找回密码
	 *************************************************************/
	function userResetPsw() {
		/********************************************************************************
		 函数名：_sendTelCode
		 功能：发送短信验证码
		返回值：201 300
		 *******************************************************************************/
		this._sendTelCode = function() {
			var verifyCode = $('.signin_phone input[type=text]').val();
			var userName = $('.signin_phone input[type=tel]').val();
			var URL = '/api/verificationCode/checkVerifyCodeX';
			var param = {
				"VerifyCode": verifyCode, //验证码
				"guidCode": G_VerifyCode, // 验证码字符串
				"Tel": userName,  // 手机号
				"agentCode": G_AgentInfo.getAgentCode(),   // 代理商编号
				"Opt":'restorePassword',  // 忘记密码
				"isRepeat":0, // 是否为用户点重发
				"product":'考试宝典' // 应用名称
			};
			$('.loadingDiv,.loadingDrop').show();
			var _success = function(json) {
				$('.loadingDiv,.loadingDrop').hide();
				//接收端口返回的数据,json如果没有数据返回为null
				var data = json;
				//转换成json格式
				var jsonData = JSON.parse(data);
				//查询成功
				if(jsonData && jsonData.status === 200) {
					/*短信发送成功*/
					G_isVerifySuccess = true;
					G_Prg.popMsg('短信验证码已发送',1000,'isCenter');
				} else if(jsonData && jsonData.status === 201) {
					G_Prg.popMsg(jsonData.msg,1000,'isCenter');
					$('.signin_phone input[type=text]').val('');
					G_userRegister.refreshVerifyCode();
				} else if(jsonData && jsonData.status === 300) {
					G_Prg.throw('程序运行错误，GetPswByTel. _sendTelCode：数据库连接失败');
				} else {
					G_Prg.throw('抱歉，不能处理 GetPswByTel. _sendTelCode：status = "' + jsonData.status + '"！');
				}
			};
			G_AjaxApi_ZBRecord.post(URL, param, false, _success);
		};
		/********************************************************************************
		 函数名：resetPassword
		 功能：检测验证码正确与否并修改密码
		参数:telNumber 手机号 ，telCode 短信验证码
		修改：接口换了 （接口参数
			 * 找回密码
			 * @post   /api/user/restorePassword
			 * @param  password  新密码MD5
			 * @param  phone  用户名
			 * @param  verifyCode 手机验证码
			 *）
		 *******************************************************************************/
		this.resetPassword = function(telNumber,telCode) {
			$('.signin_resetpwd input.passhide').each(function() {
				if($(this).css('display') == 'none') {
					$(this).val($(this).siblings('input.passshow').val());
				}
			});
			var newPsw = $('.signin_resetpwd input.pwd').val();
			var userType = 1;
			if(G_Prg.checkEmail(telNumber)) { //邮箱登录
				userType = 2;
			}
			if(G_Prg.checkCellPhone(telNumber)) { //手机登录
				userType = 3;
			}
			var userPasswordMd5 = hex_md5(newPsw); //md5加密
			var prams = {
				"password" : userPasswordMd5,
				"phone" :telNumber,
				"verifyCode" :telCode
			};
			var URL = '/api/user/restorePassword';
			$('.loadingDiv,.loadingDrop').show();
			var _success = function(json) { //G_AjaxApi.get的回调函数
				//接收端口返回的数据,转换成json格式
				$('.loadingDiv,.loadingDrop').hide();
				var jsonData = JSON.parse(json);
				if(jsonData.status === 200) {
					G_Prg.popMsg('密码修改成功，请你重新登录！',1000,'isCenter');
//						window.location.href = '/login';
				} else if(jsonData.status === 300) {
					G_Prg.popMsg('短信验证码不正确！',1000,'isCenter');
                    G_isPhoneVerifySuccess = false;
				} else {
					G_Prg.throw('抱歉，不能处理 UserGetBackPsw._resetPassword：status = "' + jsonData.status + '"！');
				}
			};
			G_AjaxApi_ZBRecord.post(URL,prams , true, _success);
		};
	}
	/*************************************************************
	 函数名：_getUserAgent
	 功能：获取用户浏览器Navigator属性
	 *************************************************************/
	function _getUserAgent() {
		var userAgent = navigator.userAgent.split('/');
		return userAgent;
	}
		return new userRegister();
		function _getClientType() {
	    var browser = {
	        versions: function() {
	            var u = navigator.userAgent,
	            app = navigator.appVersion;
	            return {
	                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
	                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
	                iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1,
	                iPad: u.indexOf('iPad') > -1,
	                webApp: u.indexOf('Safari') == -1
	            };
	        } ()
	    };
	    if (browser.versions.iPhone || browser.versions.iPad) {
	        return 'web_iPhone';
	    }
	    if (browser.versions.ios || browser.versions.android || browser.versions.webApp) {
	        return 'web_android';
	    }
	    return 'web_pc';
	}
}